Get a category by ID.
  • 12 May 2026
  • 9 Minutes to read
  • Contributors
  • Dark
    Light

Get a category by ID.

  • Dark
    Light

Article summary

Get
/v3/projects/{project_id}/categories/{category_id}

Returns category metadata including nested articles and child categories. Requires ViewCategories permission and the caller must pass the ACL check for the requested category. Returns 404 if the category does not exist or the caller lacks access. Use GET /v3/projects/{projectId}/categories/{categoryId}/content to retrieve the actual body content separately.

Security
OAuth

All V3 endpoints require a Bearer token. Generate tokens in the Document360 portal under Settings > API Tokens. Tokens are project-scoped, require the customerApi scope, and do not expire by default. Tokens can be revoked at any time from the portal. Include the token in every request: Authorization: Bearer <your-token>. Alternatively, use the Authorize button below to sign in via OAuth2 Authorization Code flow with PKCE.

FlowAuthorization Code
Authorization URLhttps://identity.document360.net/connect/authorize
Token URLhttps://identity.document360.net/connect/token
Scopes:
customerApiDocument360 Customer API
Path parameters
project_id
string (uuid) Required

The unique identifier of the project. Retrieve project IDs from GET /v3/projects.

Example9a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d
category_id
string (uuid) Required

The unique identifier of the category. Retrieve category IDs from GET /v3/projects/{project_id}/categories.

Exampleb4c5d6e7-f8a9-0b1c-2d3e-4f5a6b7c8d9e
Responses
200

Category found and returned successfully.

Category retrieved successfully

Returns the specified category with its child categories and articles.

{
  "data": {
    "id": "9a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d",
    "name": "Getting Started",
    "description": "Guides to help new users get up and running quickly.",
    "project_version_id": "1c2d3e4f-5a6b-7c8d-9e0f-a1b2c3d4e5f6",
    "order": 0,
    "parent_category_id": null,
    "hidden": false,
    "icon": "icon-book",
    "slug": "getting-started",
    "category_type": 0,
    "created_at": "2025-03-01T09:00:00Z",
    "modified_at": "2025-07-15T14:30:00Z",
    "status": 3,
    "content_type": 0,
    "current_workflow_status_id": "b7e2a1d4-3f56-4c89-9d0e-1a2b3c4d5e6f",
    "articles": [],
    "child_categories": [
      {
        "id": "d7e8f9a0-b1c2-3d4e-5f6a-7b8c9d0e1f2a",
        "name": "Installation",
        "description": "Step-by-step installation instructions.",
        "project_version_id": "1c2d3e4f-5a6b-7c8d-9e0f-a1b2c3d4e5f6",
        "order": 0,
        "parent_category_id": "9a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d",
        "hidden": false,
        "icon": "icon-download",
        "slug": "installation",
        "category_type": 1,
        "created_at": "2025-03-02T10:00:00Z",
        "modified_at": "2025-06-20T12:00:00Z",
        "status": 3,
        "content_type": 0,
        "current_workflow_status_id": null,
        "articles": [],
        "child_categories": []
      }
    ]
  },
  "success": true,
  "request_id": "req_abc123def456",
  "errors": null,
  "warnings": null
}
Expand All
object

Generic API response wrapper containing typed data.

data
object

Response data payload.

id
string (uuid) | null

Unique identifier of the category.

Example9a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d
name
string | null

Name of the category.

description
string | null

Description of the category.

project_version_id
string | null

Project version this category belongs to. Corresponds to a version from GET /v3/projects/{projectId}/project-versions.

order
integer (int32)

Sort order within the parent category.

parent_category_id
string | null

Identifier of the parent category, if any. Retrieve category IDs from GET /v3/projects/{projectId}/categories.

hidden
boolean

Whether the category is hidden from readers.

icon
string | null

Icon identifier for the category.

slug
string | null

URL-friendly slug for the category.

category_type
string

Type of the category. Possible values: 0 = Folder, 1 = Page, 2 = Index.

Valid values[ "folder", "page", "index" ]
created_at
string (date-time) | null

Date and time the category was created.

modified_at
string (date-time) | null

Date and time the category was last modified.

status
string | null

Publication status of the category. Possible values: 0 = Draft, 3 = Published.

Valid values[ "draft", "published", "forked", "unpublished" ]
content_type
string | null

Content format type. Possible values: 0 = Markdown, 1 = Wysiwyg (rich text), 2 = Block.

Valid values[ "markdown", "wysiwyg", "block" ]
current_workflow_status_id
string | null

Current workflow status identifier, if workflows are enabled. Retrieve available statuses from GET /v3/projects/{projectId}/workflow-statuses.

articles
Array of object (ArticleResponse) | null

Articles belonging to this category.

object

Summary representation of an article.

id
string (uuid) | null

The unique identifier of the article.

Example9a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d
title
string | null

The title of the article.

ExampleGetting Started with Single Sign-On
public_version
integer (int32) | null

The latest published version number, or null if the article has never been published.

Example2
latest_version
integer (int32)

The latest version number including drafts.

Example3
hidden
boolean

Whether the article is hidden from readers.

Examplefalse
status
string

The publication status of the article. Possible values: 0 = Draft, 3 = Published.

Valid values[ "draft", "published", "forked", "unpublished" ]
order
integer (int32)

The display order of the article within its category.

Example5
slug
string | null

The URL slug for the article.

Examplegetting-started-with-single-sign-on
content_type
string | null

The editor content type of the article. Possible values: 0 = Markdown, 1 = Wysiwyg (rich text), 2 = Block.

Valid values[ "markdown", "wysiwyg", "block" ]
translation_option
string

The translation status of the article. Possible values: 0 = None, 1 = NeedTranslation, 2 = Translated, 3 = InProgress.

Valid values[ "none", "needTranslation", "translated", "inProgress" ]
is_shared_article
boolean

Whether the article is shared across multiple projects.

Examplefalse
created_at
string (date-time) | null

The date and time the article was created.

Example2025-06-01T09:00:00Z
modified_at
string (date-time) | null

The date and time the article was last modified.

Example2025-08-15T14:30:00Z
created_by
string | null

The user ID of the original article creator. Corresponds to a user from GET /v3/projects/{projectId}/users.

Examplea1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d
current_workflow_status_id
string | null

The current workflow status identifier. Retrieve available statuses from GET /v3/projects/{projectId}/workflow-statuses.

Exampleb7e2a1d4-3f56-4c89-9d0e-1a2b3c4d5e6f
url
string (uri) | null

The full URL of the article.

Examplehttps://docs.example.com/en/articles/getting-started-with-single-sign-on
exclude_from_external_search
boolean

Whether the article is excluded from external search engine indexing.

Examplefalse
security_visibility
string | null

The security visibility level of the article. Possible values: 0 = Public (visible to all), 1 = Protected (authenticated users only), 2 = Mixed.

Valid values[ "public", "protected", "mixed" ]
child_categories
Array of object (CategoryResponse) | null

Nested child categories.

object Recursive

Category with child categories and articles.

success
boolean

Whether the API request was successful.

request_id
string

Unique identifier for request tracing and correlation.

Min length1
errors
Array of object (ApiError) | null

List of errors if the request failed.

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

List of non-fatal warnings from the request.

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1
401

Authentication token is missing or invalid.

Headers
WWW-Authenticate
string
Indicates the authentication scheme required. Returns `Bearer` with optional `error` and `error_description` parameters per RFC 6750.
Missing or invalid token

Authentication token is missing or invalid.

{
  "type": "https://developer.document360.com/errors/unauthorized",
  "title": "Unauthorized.",
  "status": 401,
  "detail": "The authentication token is missing or has expired.",
  "instance": null,
  "trace_id": "req_abc123def456",
  "errors": [
    {
      "code": "UNAUTHORIZED",
      "message": "Bearer token is missing or invalid.",
      "field": null,
      "details": null
    }
  ],
  "warnings": null
}
Expand All
object

RFC 7807 Problem Details response for V3 API errors. Content-Type: application/problem+json

type
string

URI reference identifying the error type (links to documentation).

Min length1
title
string

Short human-readable summary of the error type.

Min length1
status
integer (int32)

HTTP status code.

detail
string | null

Human-readable explanation specific to this occurrence.

instance
string | null

URI of the request that generated the error.

trace_id
string | null

Request trace identifier for correlation.

errors
Array of object (ApiError) | null

Structured list of specific errors (extension field).

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

Non-fatal warnings (extension field).

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1
404

Category not found.

Resource not found

The requested resource was not found.

{
  "type": "https://developer.document360.com/errors/not-found",
  "title": "Not Found.",
  "status": 404,
  "detail": "The requested resource does not exist or has been deleted.",
  "instance": null,
  "trace_id": "req_abc123def456",
  "errors": [
    {
      "code": "RESOURCE_NOT_FOUND",
      "message": "The requested resource was not found.",
      "field": null,
      "details": null
    }
  ],
  "warnings": null
}
Expand All
object

RFC 7807 Problem Details response for V3 API errors. Content-Type: application/problem+json

type
string

URI reference identifying the error type (links to documentation).

Min length1
title
string

Short human-readable summary of the error type.

Min length1
status
integer (int32)

HTTP status code.

detail
string | null

Human-readable explanation specific to this occurrence.

instance
string | null

URI of the request that generated the error.

trace_id
string | null

Request trace identifier for correlation.

errors
Array of object (ApiError) | null

Structured list of specific errors (extension field).

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

Non-fatal warnings (extension field).

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1
429

Rate limit exceeded. Retry after the duration specified in the Retry-After header.

Headers
Retry-After
integer
Number of seconds to wait before retrying the request. Use exponential backoff with jitter for optimal retry behavior.
X-RateLimit-Limit
integer
The maximum number of requests allowed in the current time window. Limits are applied per API token per project.
X-RateLimit-Remaining
integer
The number of requests remaining in the current time window. When this reaches 0, subsequent requests will receive a 429 response.
X-RateLimit-Reset
integer
The UTC epoch timestamp (in seconds) when the current rate limit window resets.
Rate limit exceeded

Rate limit exceeded.

{
  "type": "https://developer.document360.com/errors/too-many-requests",
  "title": "Too Many Requests.",
  "status": 429,
  "detail": "Rate limit exceeded. Retry after the duration specified in the Retry-After header.",
  "instance": null,
  "trace_id": "req_abc123def456",
  "errors": [
    {
      "code": "TOO_MANY_REQUESTS",
      "message": "Rate limit exceeded. Retry after the duration specified in the Retry-After header.",
      "field": null,
      "details": null
    }
  ],
  "warnings": null
}
Expand All
object

RFC 7807 Problem Details response for V3 API errors. Content-Type: application/problem+json

type
string

URI reference identifying the error type (links to documentation).

Min length1
title
string

Short human-readable summary of the error type.

Min length1
status
integer (int32)

HTTP status code.

detail
string | null

Human-readable explanation specific to this occurrence.

instance
string | null

URI of the request that generated the error.

trace_id
string | null

Request trace identifier for correlation.

errors
Array of object (ApiError) | null

Structured list of specific errors (extension field).

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

Non-fatal warnings (extension field).

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1
500

An unexpected server error occurred.

Unexpected server error

Unexpected server error.

{
  "type": "https://developer.document360.com/errors/internal-error",
  "title": "Internal Server Error.",
  "status": 500,
  "detail": "An unexpected error occurred. Please try again or contact support.",
  "instance": null,
  "trace_id": "req_abc123def456",
  "errors": [
    {
      "code": "INTERNAL_SERVER_ERROR",
      "message": "An unexpected error occurred.",
      "field": null,
      "details": null
    }
  ],
  "warnings": null
}
Expand All
object

RFC 7807 Problem Details response for V3 API errors. Content-Type: application/problem+json

type
string

URI reference identifying the error type (links to documentation).

Min length1
title
string

Short human-readable summary of the error type.

Min length1
status
integer (int32)

HTTP status code.

detail
string | null

Human-readable explanation specific to this occurrence.

instance
string | null

URI of the request that generated the error.

trace_id
string | null

Request trace identifier for correlation.

errors
Array of object (ApiError) | null

Structured list of specific errors (extension field).

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

Non-fatal warnings (extension field).

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1

Was this article helpful?